/*
  版权所有，禁止抄袭、修改以及进行其他未经授权的侵权行为
  author：钱慧敏
  email:1147175965@qq.com
*/

if(typeof RMenus_AddOn=="undefined" || RMenus_AddOn==null){

  /*该api要在加载body之后引用并调用*/
  //[1]function _RMenus_AddOn(){
  var RMenus_AddOn=new (function(){

    /*增加用于存储菜单项数据的元素，其innerText是菜单项数据*/
    var ele=document.createElement("div");
    ele.style.display="none";
    ele.id="RMenus_addon_contextmenu_data";
    document.body.appendChild(ele);

    /*body的contextmenu事件交到插件处理之前的前置处理函数句柄，该句柄函数形式如下：
    function handler(event){},其中event是body上的contextmenu事件对象，在这个
    句柄函数中我们可以根据event中的信息调用setMenus函数重新设置页面右键菜单项,以及
    保存event事件从而为菜单点击处理函数传递右键点击的数据
    */
    this.setPrefixHandler=function(handler){
      this.prefixHandler=null;
      this.prefixHandler=handler;
    }

    /*获得当前设置的菜单项数据，它是Chrome.contextMenus.create(object createProperties, function callback)函数
      中createProperties对象数组
    */
    this.getMenus=function(){
      try{return JSON.parse(document.getElementById("RMenus_addon_contextmenu_data").innerText);}
      catch(err){console.log(err);return null;}
    };

    /*设置菜单项，传入函数的参数是Chrome.contextMenus.create(object createProperties, function callback)函数
      中createProperties对象数组
    */
    this.setMenus=function(menus){
      try{document.getElementById("RMenus_addon_contextmenu_data").innerText=JSON.stringify(menus);}
      catch(err){console.log(err);}
    };

    /*设置处理被点击菜单项的函数句柄，该句柄函数形式如下
    function handler(data){}
    其中，data是{info:info,tab:tab},
      info,Information about the item clicked and the context where the click happened.
      https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/menus/OnClickData

      tab,The details of the tab where the click took place. If the click did not take place in a tab, this parameter will be missing.
      https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs/Tab
    */
    this.setMenuItemHandler=function(handler){
      this.MenuItemHandler=null;
      this.MenuItemHandler=handler;
    }
  })();

  //[1]var RMenus_AddOn=new _RMenus_AddOn();

  /*增加body的contextmenu事件交到插件处理之前的前置处理代码*/
  document.body.addEventListener("contextmenu",
    function(event){if(RMenus_AddOn.prefixHandler!=null) {
      RMenus_AddOn.prefixHandler(event);
    }});

  function RMenus_addon_contextmenu_onclick_handle(event){
    if(RMenus_AddOn.MenuItemHandler!=null){
      RMenus_AddOn.MenuItemHandler(JSON.parse(event.target.innerText));}
    if(document.getElementById(event.target.getAttribute("pid"))!=null){
      document.body.removeChild(document.getElementById(event.target.getAttribute("pid")));}
  }

}
